﻿using NTypeClasses;

namespace TypeClassSample.Math
{
	[TypeClass]
	public abstract class Field<T> : Ring<T>
	{
		public abstract T One { get; }
		public abstract T op_Division(T a, T b);
		public virtual T op_Increment(T value)
		{
			return op_Addition(One, value);
		}
		public virtual T op_Decrement(T value)
		{
			return op_Subtraction(value, One);
		}

		// uncomment this to see if TypeClassCheck works
		// public abstract T MinusOne { get; }
	}
}
